Разработка расширений
Расширение портала Semantic MDM представляет собой стандартный модуль Angular (@****NgModule()), декорированный аннотацией @M2Plugin() из библиотеки m2-core, позволяющей задать описание реализаций точек расширения. В рамках одного расширения может бы реализовано неограниченное количество точек расширения.
Аннотация @M2Plugin(config: M2PluginConfig) принимает конфигурационный объект со следующими параметрами:
- name: string – наименование расширения;
- version: string – версия;
- description?: string – описание расширения;
- extensionPoints: ExtensionPoint[] – список деклараций точек расширения;
- params?: Parameter[] – описание настраиваемых параметров расширения;
- isPublic?: boolean - определяет, должно ли расширение быть доступно до аутентификации пользователя. Значение true имеет смысл использовать, например, если расширение переопределяет внешний вид страницы авторизации. В противном случае рекомендуется устанавливать значение false или не заполнять (по умолчанию принимается false);
- initializer?: Type - позволяет указать ссылку на сервис, реализующий интерфейс PluginInitializer, который отвечает за инициализацию расширения. Метод initialize() может возвращать Promise/Observable. В этом случае приложение не будет инициализировано до тех пор пока не будет получен результат вызова метода initialize(), в связи с чем не рекомендуется возвращать Promise/Observable задач, выполнение/завершение которых занимает длительное время.
Описание параметра расширения представляет собой объект Parameter со следующими полями:
- paramName: string - наименование параметра;
- paramDisplayName?: string - пользовательское наименование параметра;
- paramValue?: string - значение по умолчанию;
- isPublic?: boolean - доступность значения параметра при запросе незащищенным методом;
- rolesAllowed?: string - список ролей пользователей, имеющих доступ к значению параметра (строка в виде значений, разделенных запятой без пробелов);
- valueType?: AttributeType - тип данных значения параметра;
- isMultiple?: boolean - признак множественности значения;
- entityType?: string - тип сущности, позволяющий задать специальные контролы для ввода значения. В настоящий момент поддерживаются следующие типы:
- EXECUTOR - эксперт НСИ;
- ACCOUNT - пользователь;
- SECURITY_GROUP - роль;
- ENTRY - справочник или классификатор;
- REFERENCE_BOOK - справочник;
- TREE_CLASSIFIER - древовидный классификатор;
- CLS_NODE - группа;
- ITEM - позиция;
- ATTRIBUTE - простой атрибут;
- AGGREGATION_STEREOTYPE - атрибут связи;
- PROPERTY - атрибут (простой или связи);
- EXTERNAL_SYSTEM - внешняя система;
- APPLICATION - заявка;
- TRANSACTION - пакет изменений;
- APPLICATION_TEMPLATE - шаблон заявки;
- isInternal?: boolean - делает параметр невидимым в диалоге настройки значений;
- sortOrder?: number - определяет порядок сортировки параметра в диалоге настройки значений;
- categoryName?: string - определяет категорию параметра в диалоге настройки значений, что позволяет группировать логически связанные параметры для удобства работы с ними;
Для чтения значений параметров в расширении базовое приложение предоставляет сервис PluginSupportService, в котором имеется метод getPluginSettings(pluginName: string), ожидающий в качестве аргумента наименование расширения из @M2Plugin(). Метод возвращает объект, представляющий собой набор пар ключ-значение, где ключ - наименование параметра.
В настоящий момент предусмотрены следующие точки расширения:
- RouterExtensionPoint - добавление новых модулей приложения, управляемых роутером, или переопределение штатных;
- PanelBtnExtensionPoint - добавление кнопок в панели над деревом, таблицей, верхнем навигационном меню, ячейки строк карточек в справочниках, классификаторах, заявках, редакторе метаданных, детализации пакета изменений и т.д.;
- PanelBtnFilterExtensionPoint - скрытие кнопок в указанных выше панелях;
- PanelBtnHandlerExtensionPoint - переопределение поведения кнопок в указанных выше панелях;
- MenuItemsExtensionPoint - добавление/скрытие/удаление пунктов контестных меню дерева групп и таблицы позиций в справочниках, классификаторах, заявках, редакторе метаданных, таблице пользователей и т.д.;
- BgTaskResultExtensionPoint - обработчик результата выполнения фоновой задачи;
- BgTaskNotificationTmplExtensionPoint - шаблон сообщения о завершении фоновой задачи;
- ApplicationJournalFiltersExtensionPoint - предоставляет возможность переопределения панели с фильтрами в модуле управления заявками;
- ViewExtensionPoint - позволяет переопределять штатное представление части пользовательского интерфейса, например, атрибутов заявки, информационного блока страницы авторизации, инструментов для работы с пакетом изменений и т.д.;
- HandlerExtensionPoint - переопределяет или дополняет стандартное поведение приложения при обработке пользовательских или системых событий, например, создании/отправке/передаче заявки, изменении значения атрибута, форматировании значений переходных ключей и т.д.;
- ValueHintProviderExtensionPoint' - позволяет добавить всплывающую подсказку для значения позици/атрибута заявки;
- SettingsControlsExtensionPoint - добавление кнопок в разделы страницы "Настройки".
Помимо декоратора @M2Plugin() библиотека m2-core предоставляет следующие полезные при разработке расширений пакеты:
- model - модельные классы и интерфейсы
- service - системные сервисы и сервисы для работы с API сервера Semantic MDM
- utils - вспомогательные классы
- shared components и widget modules - базовые интерфейсные компоненты
В расширении также доступны все системные диалоги портала, которые могут быть открыты с помощью метода openDialog(<наименование_диалога>, <опции>) из сервиса GlobalModalsService. Ниже перечислены наименования системых диалогов и типы объектов, описывающих их опции (актуальный список доступных диалогов и соответствующих им конфигурационных объектов см. в LazyDialogType, LazyDialogConfig):
- FormulaEditorComponent - FormulaEditorConfig - редактор формул
- ExportConditionsEditorComponent - ExportConditionsEditorConfig - редактор условий экспорта
- ItemGeneratorComponent - ItemGeneratorConfig - мастер генерации позиций
- ExtendedSearchFiltersModalComponent - ExtendedSearchFiltersModalConfig - диалог настройки критериев расширенного поиска
- ModalCodeEditorComponent - CodeEditorConfig - модальный редактор кода
- DuplicatesDialogComponent - DuplicatesDialogConfig - мастер дедубликации позиций
- TransactionDetailsDialogComponent - TransactionDetailsDialogConfig - детализация пакета изменений
- ExportItemsDialogComponent - ExportItemsConfig - экспорт позиций во внешние системы
- RelationsEditorComponent - RelationInfo - редактор взаимосвязей между позициями
- NameParserWizardComponent - NameParserWizardConfig - мастер разбора строк
- StringParserComponent - StringParserConfig - мастер разбора строк light
- XmlExportDialogComponent - XmlExportDialogConfig - экспорт классификационной группы в XML
- MetaLinkDialogComponent - MetaLinkDialogConfig - мастер синхронизации данных с метаданными
- DeclarationSelectorComponent - DeclarationSelectorConfig - диалог выбора декларации атрибута
- ClassifierNodeSelectorComponent - (classifierNodeId: number) => any - диалог выбора классификационной группы, которой принадлежат позиции структуры классификатора
- NodesSelectorComponent - NodesSelectorConfig - диалог выбора классификационной группы
- DeclaredPropertiesSelectorComponent - DeclaredPropertiesSelectorConfig - диалог выбора атрибутов, задекларированных в группе
- ClassifierSelectorComponent - ClassifierSelectorConfig - диалог выбора классификатора
- NegotiationPredicateEditorComponent - NegotiationPredicateEditorConfig - редактор условий включения этапа согласования заявки в маршрут
- MetadataSelectorComponent - MetadataSelectorConfig - диалог выбора метаданных
- MergePropertiesDialogComponent - MergePropertiesConfig - мастер дедубликации атрибутов
- ColumnSettingsComponent - ColumnSettingsConfig - настройка состава колонок таблицы
- FavouritesSelectorComponent - FavouritesSelectorConfig - избранное
- ModalValueInputComponent - ModalValueInputConfig - модальный редактор значения атрибута
- ModalListEditorComponent - ModalListEditorConfig - модальный редактор произвольного списка значений
- WorkTimeDialogComponent - WorkTimeDialogConfig - календарь рабочего времени
- ApplicationsSlaConfigDialogComponent - ApplicationsSlaConfigDialogConfig - параметры отчетов SLA
- ModalListSelectorComponent - ModalListSelectorConfig - диалог выбора объекта из произвольного списка
- ApplicationEditorComponent - ApplicationEditorConfig - редактор заявки
- CompatibilityFormulaDialogComponent - CompatibilityEditorConfig - редактор вычисляемой совместимости
- ParamsInputDialogComponent - ParamsInputDialogConfig - диалог ввода произвольных параметов
- ReportGeneratorDialogComponent - ReportGeneratorConfig - диалог задания параметров для формирования отчета
- PostProcessingFormulaEditorComponent - PostProcessingFormulaEditorConfig - редактор функции постобработки
- SystemParamsDialogComponent - SystemParamsDialogConfig - редактор системных параметров
- UserGroupEditorComponent - UserGroupEditorConfig - мастер настройки пользовательских групп
- TransactionManagementDialogComponent - опции не предусмотрены - диалог управления пакетами изменений
Точка расширения типа RouterExtensionPoint
Точка расширения RouterExtensionPoint предназначена для добавления новых модулей приложения, управляемых роутером, или переопределение штатных и описывается следующим параметрами:
- type = 'RouterExtensionPoint';
- routerLink - путь URL, под которым будет зарегистрирован модуль. Допускаются как корневые пути, так и составные вложенные пути (например, для переопределения штатного представления подмудуля системы);
- moduleType - ссылка на Angular-модуль, в котором должна присутствовать конфигурация роутера(RouterModule.forChild(…));
- outletType?: RouterOutletType - позволяет указать специфичное назначение модуля (например, 'REFERENCE_BOOK');
- mainNavLinkOptions?: NavLinkOptions - позволяет указать куда будет встроена ссылка на модуль, а также определить правила ее видимости. Так, ссылка на новый модуль может быть добавлена в основное навигационное меню приложения ('MAIN_NAV'), панель с вкладками в МУЗ ('APP_JOURNAL_TABS') и т.д.
Внимание! В настоящий момент для точки расширения типа RouterExtensionPoint в качестве модуля в moduleType можно указывать только корневой модуль расширения (модуль, помеченный аннотацией @****M2Plugin()).
Точка расширения типа PanelBtnExtensionPoint
Точка расширения PanelBtnExtensionPoint предназначена для добавления новой кнопки в панель и описывается следующими параметрами:
- type = 'PanelBtnExtensionPoint'
- panel - указание панели, в которую следует добавить кнопку. Допустимые значения:
- CONTENT_OTHER - ContentPanelBtnContext - меню кнопки <...> в верхней панели в справочнике;
- CONTENT_TREE - ContentPanelBtnContext - панель над деревом в справочнике;
- CONTENT_TABLE - ContentPanelBtnContext - панель над таблицей в справочнике;
- CLASSIFIER_OTHER - ClassifierPanelBtnContext - панель в топ-фрейм меню в классификаторе;
- CLASSIFIER_TREE - ClassifierPanelBtnContext - панель над деревом в классификаторе;
- CLASSIFIER_TABLE - ClassifierPanelBtnContext - панель над таблицей в классификаторе;
- METADATA_OTHER - MetadataPanelBtnContext - меню кнопки <...> в верхней панели в редакторе метаданных;
- METADATA_TREE - MetadataPanelBtnContext - панель над деревом в редакторе метаданных;
- METADATA_TABLE - MetadataPanelBtnContext - панель над таблицей в редакторе метаданных;
- APPLICATIONS_OTHER - пустой контекст - меню кнопки <...> в верхней панели в МУЗ;
- APPLICATIONS_TABLE - ApplicationsTableBtnContext - панель над таблицей в МУЗ;
- APPLICATIONS_CARD - ApplicationCardBtnContext - панель над карточкой заявки в МУЗ;
- APPLICATION_COMPOSITION_GROUP_ROW - ApplicationCardRowBtnContext - кнопки в строке, группирующей множественные композиции в карточке заявки;
- APPLICATION_COMPOSITION_PART_TOOLS - ApplicationCardRowBtnContext - кнопки в значении композиции (как единичной, так и в составе множественной) в карточке заявки;
- APPLICATION_SINGLE_COMPOSITION_ATTRIBUTE_TOOLS - ApplicationCardRowBtnContext - кнопки в ячейке с наименованием единичной композиции в карточке заявки;
- APPLICATION_ATTRIBUTE_INITIAL_VALUES_TOOLS - ApplicationCardRowBtnContext - кнопки в ячейке с текущим значением позиции в карточке заявки;
- APPLICATION_ATTRIBUTE_VALUE_TOOLS - ApplicationAttributeValueBtnContext - кнопки в ячейке со значением простого атрибута/агрегации в карточке заявки;
- ITEM_AGGREGATION_GROUP_ROW - ItemCardRowBtnContext - кнопки в строке, группирующей множественные агрегации/композиции в карточке позиции;
- ITEM_AGGREGATION_PART_TOOLS - ItemCardRowBtnContext - кнопки в значении агрегации/композиции (как единичной, так и в составе множественной) в карточке позиции;
- ITEM_VALUE_TOOLS - ItemAttributeRowBtnContext - кнопки в ячейке со значением простого атрибута в карточке позции;
- TRANSACTION_DETAILS_DIALOG_HEADER - TransactionDetailsDialogHeaderBtnContext - кнопки в заголовке диалога с детализацией пакета изменений;
- TRANSACTION_MENU_APPLICATION_TOOLS - TransactionBtnMenuContext - меню кнопки "Управление пакетами изменений";
- ORIGINALS_TABLE_ACTIONS - DuplicatesEditorContext - меню кнопки "Действия" над таблицей оригиналов/дубликатов (в зависимости от направления поиска) в диалоге с результатами поиска;
- DUPLICATES_TABLE - DuplicatesEditorContext - кнопки над таблицей дубликатов в диалоге с результатами поиска;
- ITEM_EXPORTED_ITEMS_TABLE - ItemExportedItemsContext - кнопки над таблицей экспортированных сообщений в диалоге "Экспортированные сообщения позиции";
- ITEM_REPLICATION_TAB_TOOLS - ItemReplicationHeaderContext - кнопки в заголовке секции "Импорт и репликация" в карточке позиции;
- ITEM_REPLICATION_EXPORT_ROW_TOOLS - ItemReplicationBodyContext - кнопки в секции "Экспорт" в теле секции "Импорт и репликация" в карточке позиции.
- ITEM_REPLICATION_LIGHT_TAB_TOOLS - ItemReplicationHeaderContext;
- ITEM_SYSTEM_EXPORT_USAGE - ItemSystemExportUsageContext;
- JOURNAL_TABLE - JournalEditorContext;
- CONSTRAINT_TABLE_EDITOR_TABLE - ConstraintTableEditorContext;
- TRANS_KEYS_EDITOR_TABLE - TransKeysEditorContext;
- btnFactory – ссылка на фабрику, с помощью которой базовое приложение создает кнокпу. Фабрика должна реализовывать интерфейс BtnFactory, описывающий два метода:
- createBtn(ctx: BtnContext, ctx$: Observable): PluginSdiButton – метод создания кнопки со следующими аргументами:
- ctx: BtnContext - мутируемый объект, поля которого зависят от типа панели (см. сопоставление выше). Тип контекста панели можно также получить из типа панели, например, BtnContextTyped<'CONTENT_TREE'>;
- ctx$: Observable - поток изменений контекста панели, коорый можно использовать для реактивных параметров кнопки, таких как isActive$, isDisabled$.
- destroy() – вызывается при удалении панели с кнопками. Здесь следует удалять динамически создаваемые компоненты (например, подменю или модальное окно), чтобы избежать утечек памяти.
Точка расширения типа PanelBtnFilterExtensionPoint
Точка расширения PanelBtnFilterExtensionPoint предназначена для скрытия кнопок в панели и описывается следующими параметрами:
- type = 'PanelBtnFilterExtensionPoint';
- panel - панель, в которой требуется скрыть кнопку. Доступные панели см. выше в разделе PanelBtnExtensionPoint;
- btnFilterFactory – ссылка на фабрику, с помощью которой базовое приложение создает предикат, используемый для определения видимости кнопок. Фабрика должна реализовывать интерфейс BtnFilterFactory, описывающий два метода:
- createVisibilityPredicate: () => (btn: SdiButton, ctx: BtnContext) => boolean – метод создания предиката видимости кнопок. Описание контекста см. выше в разделе PanelBtnExtensionPoint;
- destroy() – вызывается при удалении панели с кнопками. Как правило, для точек расширения данного типа этот метод остается пустым.
Точка расширения типа PanelBtnHandlerExtensionPoint
Точка расширения PanelBtnHandlerExtensionPoint предназначена для переопределения поведения кнопки в панели и описывается следующими параметрами:
- type = 'PanelBtnHandlerExtensionPoint';
- panel - панель, в которой требуется скрыть кнопку. Доступные панели см. выше в разделе PanelBtnExtensionPoint;
- btnPredicate: ButtonActionType | ((btn: SdiButton) => boolean) - тип кнопки переопределяемой кнопки или предикат для ее поиска в панели. Предикат может быть задан таким образом, что вернет более одной кнопки. В таком случае будет переопределено поведение нескольких кнопок;
- btnHandlerFactory – ссылка на фабрику, с помощью которой базовое приложение создает предикат, используемый для определения видимости кнопок. Фабрика должна реализовывать интерфейс BtnFilterFactory, описывающий два метода:
- createClickHandler?: () => (ctx: BtnContext, originalHandler: SdiButton['command']) => SdiButton['command'] - метод создания обработчика события нажатия на кнопку. Описание контекста см. выше в разделе PanelBtnExtensionPoint. Аргумент originalHandler позволяет вызывать штатную реализацию обработчика нажатия кнопки и может быть полезен для случаев, когда нестандартную логику требуется выполнять условно в зависимости от контекста;
- createDropdownTemplate?: (ctx: BtnContext) => TemplateRef - метод создания шаблона меню кнопки, отображаемого при ее нажатии. Если реализован, то ему отдается приоритет, и при нажатии на кнопку отображается подменю, а обработчик игнорирутся;
- destroy() – вызывается при удалении панели с кнопками. Здесь следует удалять динамически создаваемые компоненты (например, подменю или модальное окно), чтобы избежать утечек памяти.
Точка расширения типа MenuItemsExtensionPoint
Точка расширения MenuItemsExtensionPoint служит для модификации контекстного меню того или иного объекта и описывается следующим параметрами:
- type = 'MenuItemsExtensionPoint'
- menuItemsFactory – ссылка на фабрику, с помощью которой базовое приложение создает/изменяет/удаляет пункты меню. Фабрика должна реализовывать интерфейс MenuItemsFactory, описывающий два метода:
- createMenuItems(ctx: MenuContext): PluginMenuItem – метод создания пунктов меню, в который передается контекст со следующими параметрами;
- destroy() – удаление кнопки. Здесь следует удалять динамически создаваемые компоненты, чтобы избежать утечек памяти;
- menuTarget: ContextMenuTarget - указание контекстного меню, в которое следует добавить пункты. Допустимые значения:
- CONTENT_TREEN_NODE – меню узла дерева групп в справочнике;
- CONTENT_TABLE_ROW - меню строки таблицы позиций в справочнике;
- CLASSIFIER_TREE_NODE - меню узла древовидного классификатора;
- CLASSIFIER_TABLE_ROW - меню строки таблицы классификатора;
- METADATA_TREE_NODE - меню узла дерева в конфигураторе;
- METADATA_TABLE_ROW - меню строки таблицы в конфигураторе;
- APPLICATIONS_TABLE_ROW - меню строки таблицы в МУЗ;
- APPLICATION_PARTS_TABLE_ROW - меню строки таблицы композированных позиций в заявке;
- PASSWORD_POLICY_TABLE_ROW - меню строки таблицы в диалоге парольных политик;
- USER_TABLE_ROW - меню строки таблицы пользователей в модуле Администрирование;
- REASON_FOR_APP_STATUS_CHANGE_TABLE_ROW - меню строки таблицы причин возврата заявок;
- menuItemsFactory – ссылка на фабрику, с помощью которой базовое приложение создает/изменяет/удаляет пункты меню. Фабрика должна реализовывать интерфейс MenuItemsFactory, описывающий два метода:
- createMenuItems(ctx: MenuContext): PluginMenuItem – метод создания пунктов меню. Тип контекста можно получить из типа меню, например, MenuContextTyped<'CONTENT_TREE_NODE'>;
- filterMenuItems?: (menuItems: MenuItem[], ctx: C) => MenuItem[] - метод, позволяющий скрыть штатные пункты контестного меню;
- destroy() – метод, который вызывается при удалении компонента, для которового создавалось контекстное меню. Здесь следует удалять динамически создаваемые компоненты, чтобы избежать утечек памяти.
Создаваемый через расширение пункт меню должен представлять собой объект, реализующий следующий интерфейс:
interface PluginMenuItem extends MenuItem {
targetItemPredicate?: (item: MenuItem) => boolean;
placement?: PlacementType; // BEFORE, AFTER или INSIDE
}
Где
export interface MenuItem {
label?: string;
icon?: string;
command?: (event?: any) => void;
url?: string;
routerLink?: any;
queryParams?: {
[k: string]: any;
};
items?: MenuItem[] | MenuItem[][];
expanded?: boolean;
disabled?: boolean;
visible?: boolean;
target?: string;
routerLinkActiveOptions?: any;
separator?: boolean;
badge?: string;
badgeStyleClass?: string;
style?: any;
styleClass?: string;
title?: string;
id?: string;
}
Точка расширения типа BgTaskResultExtensionPoint
Точка расширения позволяет добавить нестандартный обработчик результата выполнения фоновой задачи и описывается следующим параметрами:
- type = 'BgTaskResultExtensionPoint';
- workName - наименование фоновой задачи, к которой применим обработчик результа ее выполнения;
- btnFactory - ссылка на фабрику, с помощью которой базовое приложение создает кнокпу-обработчик результата выпонения фоновой задачи. Фабрика должна реализовывать типизированный интерфейс BtnFactory, описывающий два метода:
- createBtn(ctx: WorkInfo): SdiButton - метод создания кнопки, в который передается информация о фоновой задаче;
- destroy() - удаление кнопки. Здесь следует удалять динамически создаваемые компоненты (например, модальное диалоговое окно), чтобы избежать утечек памяти.
Точка расширения типа BgTaskNotificationTmplExtensionPoint
Точка расширения позволяет задать нестандартный шалон сообщения о завершении фоновой задачи и описывается следующим параметрами:
- type = 'BgTaskNotificationTmplExtensionPoint';
- workInfoPredicate: (workInfo: WorkInfo) => boolean - предикат фоновой задачи, для которой необходимо отобразить заданный шаблон сообщения о ее завершении;
- tmplFactory - ссылка на фабрику, с помощью которой базовое приложение создает шаблон сообщения. о завершении фоновой задачи. Фабрика должна реализовывать интерфейс TmplFactory, описывающий два метода:
- createTmpl() - метод создания шаблона сообщения. В шаблон передается параметра notification типа Notification;
- destroy() - удаление кнопки. Здесь следует удалять динамически создаваемые компоненты (например, модальное диалоговое окно), чтобы избежать утечек памяти.
Точка расширения типа ApplicationJournalFiltersExtensionPoint
Точка расширения ApplicationJournalFiltersExtensionPoint предоставляет возможность переопределения панели с фильтрами в модуле управления заявками и описывается следующим параметрами:
- type = 'ApplicationJournalFiltersExtensionPoint';
- patchFiltersConfig: (config: ApplicationFilterTabsConfig) => ApplicationFilterTabsConfig - функция, позволяющая модифировать настройки фильтров заявок в панели слева по вкладкам (Мои заявки, Текущие, Обработанные и т.д.). Допускается добавлять подвкладки с фасетами по любой индексируемой колонке, а также указывать ссылку на компонент с произвольным представлением фильтра. В последнем случае класс компонента должен являться наследником класса ApplicationFilterTabComponent из библиотеки m2-core, предоставляющего поток изменений состояния таблицы и удобный метод, позволяющий применять выбранные в фильтре фасеты.
Точка расширения типа ViewExtensionPoint
Точка расширения ViewExtensionPoint позволяет переопределять штатное представление части пользовательского интерфейса и описывается следующим параметрами:
- type = 'ViewExtensionPoint';
- component - ссылка на компонент, реализующий нестандартное представление. Компонет должен реализовывать/расширять специальный интерфейс/класс (описывающий входящие параметры компонента) в зависимости от slotType (см. сопоставление ниже);
- slotType - тип переопределяемого элемента пользовательского интерфейса. Ниже приведены поддерживаемые значения и соответствующие им интерфейсы/абстрактные классы, которые должны реализовывать/расширять классы компонетов, указаные в поле component:
- APPLICATION_ATTRIBUTES - IApplicationAttributesComponent - атрибуты в карточке заявки;
- LOGIN_PAGE_INTRO - пустой интерфейс - информационная часть страницы авторизации;
- APPLICATION_FORM_PRIORITY - ApplicationFormPriorityComponent - селектор приоритета в карточке заявки;
- TRANSACTION_BUTTON_GROUP - ITransactionButtonComponent - кнопка управления пакетом изменений в паре с кнопкой управления текущей заявкой
- viewName - необязательное пользовательское наименование нестандартного представления.
Точка расширения типа HandlerExtensionPoint
Точка расширения HandlerExtensionPoint позволяет переопределять или дополнять стандартное поведение приложения при обработке пользовательских или системых событий, например, создании/отправке/передаче заявки, изменении значения атрибута, форматировании значений переходных ключей и т.д. Точка расширения описывается следующим параметрами:
- type = 'HandlerExtensionPoint';
- handlerType - тип обработчика. Обработчки делятся на 2 вида:
- переопределяющие - система берет первый загруженный обработчик конкретного типа и подменяет им штатное поведение. В большинстве обработчиков данного типа в качестве аргумента передается ссылка на функцию, реализующую штатное поведение системы, что позволяет сделать обработчик условным. Так, при выполнении какого-то условия может отрабатывать нестандартная логика, в противном случае есть возможность вызова штатной реализации;
- дополняющие - система находит и выполянет все обработчики конкретного типа, дополняя штатное поведение системы.
- handler: Type<HandlerClass> - ссылка на класс обоработчика, который должен наследоваться от специального абстрактного класса, зависящего от типа обработчика (например, Type<HandlerClass<'APPLICATION_CREATION'>>). Сопоставление типов и соответствующих им классов обработчиков см. ниже.
Переопределяющие обработчкики:
- APPLICATION_CREATION - ApplicationCreationHandler - вызывается после выбора пользователем шаблона для создания новой заявки. Может быть использован для дополнительной валидации возможности создания заявки, предзаполнения значений атрибутов создаваемой заяаки и т.д. По умолчанию система создает заявку по штатному алгоритму и открывает ее в диалоге;
- APP_ATTRS_SOURCE_ATTR_VALUE_CHANGED - AppAttrsSourceAttrValueChangedHandler - вызывается после изменения значения атрибута заявки, являющегося источником динамических атрибутов позиции в заявке. Может быть использован для предзаполнения значений атрибутов заявки. По умолчанию система перезачитывает все атрибуты заявки с целью отображению пользователю актуальных значений;
- SELECT_EXECUTOR_FOR_APPS_DELEGATION_CLICK - SelectExecutorForAppsDelegationClickHandler - вызывается перед открытием диалога для выбора эксперта НСИ, которому требуется передать заявку(и). Может быть использован для дополнительной валидации возможности передачи заявки(ок), а также отображения модифицированного списка возможных экспертов НСИ;
- SELECT_NEGOTIANT_FOR_APPS_DELEGATION_CLICK - SelectNegotiantForAppsDelegationClickHandler - вызывается перед открытием диалога для выбора согласующего, которому требуется передать заявку(и). Может быть использован для дополнительной валидации возможности передачи заявки(ок), а также отображения модифицированного списка возможных согласующих;
- FORMAT_TRANS_KEY_VALUE - FormatTransKeyValueHandler - используется для форматирования отображаемого значения переходного ключа;
- OPEN_APP_ATTR_ELEMENT_SELECTOR - OpenAppAttrElementSelectorHandler - может быть использован для переопределения диалога, поднимаемого с целью выбора значения в атрибут заявки ссылочного типа.
- COMMIT_TX_CLICK - CommitTxHandler - позволяет переопределять обработчик события нажатия на кнопку публикации пакета изменений.
- CALC_ITEMS_TO_EXPORT_LIMIT - CalcItemsToExportLimitHandler - позволяет задать ограничение на количество позиций, экспортируемых в Excel;
- CALC_EXPORTED_ITEMS_TO_EXPORT_LIMIT - CalcExportedItemsToExportLimitHandler - позволяет задать ограничение на количество сообщений экспорта, экспортируемых в Excel;
- CALC_SOURCE_RECORDS_TO_EXPORT_LIMIT - CalcSourceRecordsToExportLimitHandler - позволяет задать ограничение на количество сообщений испорта, экспортируемых в Excel;
Дополняющие обработчики:
- POST_LOGIN - PostLoginHandler - постобработчик успешного входа в систему;
- APP_ATTR_VALUE_CHANGED - AppAttrValueChangedHandler - постобработчик изменения значения простого атрибута заявки или атрибута связи типа "агрегация";
- PRE_SEND_APPLICATIONS - PreSendApplicationsHandler - предобработчик перед отправкой заявки. Позволяет предзаполнить атрибуты заявки.
- FORMAT_APP_ATTR_VALUE_PROPOSITIONS - FormatAppAttrValuePropositionsHandler - позволяет модифицироваь или подменить выпадающий список значений для атрибута заявки;
- FORMAT_ITEM_VALUE_PROPOSITIONS - FormatItemValuePropositionsHandler - позволяет модифицировать или подменить выпадающий список значений для атрибута позиции;
- FORMAT_ITEM_STATUS_PROPOSITIONS - FormatItemStatusPropositionsHandler - позволяет модифицировать или подменить выпадающий список значений для статуса позиции;
- ITEM_VALUE_CHANGED - ItemValueChangedHandler - клиентский постобработчик изменения значения атрибута позиции;
- CAN_DOWNLOAD_APP_FILE - CanDownloadAppFileHandler - позволяет ограничить возможность открытия/скачивания файла прикрепленного к комментарию статуса или атрибуту заявки.
Точка расширения типа ValueHintProviderExtensionPoint
Точка расширения ValueHintProviderExtensionPoint позволяет добавить всплываю подсказку для значения простого атрибута позиции и описывается следующим параметрами:
- type = 'ValueHintProviderExtensionPoint';
- provider: Type - ссылка на Angular-сервис (помеченный декоратором @Injectable()), реализующий интерфейс ValueHintProvider со следующими полями:
- isApplicable(propertyId: number, opts: Omit<ValueOpts, 'valueData'>): boolean - предикат, определяющий применимость подсказки для атрибута. Вызывается однократно при инициализации компонента со значением атрибута;
- show(value: any, event: MouseEvent, opts: ValueOpts): void - функция, вызываемая при наведении курсора мыши на иконку подсказки. Как правило, ее реализация представляет собой вызов библиотечного метода this.globalModalsService.showHintCard(...) с необходимыми параметрами, определяющими содержимое всплывающей подсказки;
- isVisible?(value: any, opts: ValueOpts): boolean - предикат, определяющий видимость подсказки для значения. В отличие от isApplicable(), данный придикат вызывается каждый раз, когда изменяется значение атрибута;
- styles?: Partial - необязательные дополнительные стили, определяющие внешний вид иконки вспдывающей подсказки.
Точка расширения типа SettingsControlsExtensionPoint
Точка расширения SettingsControlsExtensionPoint позволяет добавлять кнопки в разделы страницы "Настройки" и описывается следующим параметрами:
- type = 'SettingsControlsExtensionPoint';
- section: Extract<SettingsSectionType, SettingsSectionType.utilities | SettingsSectionType.jconsole> | Section - секция на странице настроек, в которую требуется добавить кнопки. Может быть задана как существующая секция, так и параметры для добавления новой (см. интерфейс Section)
- controlsFactory: Type - ссылка на фабрику создания кнопок, представляющую собой сервис (помеченный декоратором @Injectable()), реализующий интерфейс SettingsControlsFactory. Данный интерфейс определяет метод createControls: () => SettingsControl[], используемый для создания кнопок на странице настроек. В настоящее время поддерживается простая кнопка (ButtonSettingsControl), описываемая следующими параметрами:
- type = SettingsControlType.Button - тип кнопки;
group: string | SettingsControlGroupInfo - указание группы кнопок в теле секции;
- name: string - наименование кнопки;
- command: (e: MouseEvent) => any - обработчик события нажатия на кнопку.